# -*- coding: UTF-8 -*-
import random
import Planete
nomExistant=[]

class Systeme :
#Creation de la classe Planete
    def __init__ (self, galaxie,ID, seed,nom, posX, posY, worldSize):
        self.seed = seed
        self.nom = nom
        self.posX = posX
        self.posY = posY
        self.galaxie = galaxie
        self.ID = ID
        self.worldSize = worldSize
        self.dimX=50
        self.dimY=50
        self.indexImageEtoile = random.randint(0,4)
        
        self.typeRessources = ["fer", "petrole","fertilite","gaz","titane","cuivre","or","argent"]
        self.ressourcesJoueur=[]
        for nbRessource in range(len(self.typeRessources)):
            self.ressourcesJoueur.append(0)

#        indique si c'est un système de départ. Les systèmes de départs doivent avoir
#        toutes les ressources de bases de disponibles sur leur planètes
        self.sysDepart = False
        
        self.listePlanetes=[]
        self.listeRessources=[]
        self.listeEntites=[]
        
        self.genererPlanetes()
        
######################################
#######
#######  MÉTHODE DE GÉNÉRATION
#######
######################################

    
    def genererNom(self):
        self.list1=["La","Le","Lo","Li","Lu","Ly",  "Da","De","Do","Di","Du","Dy",  "Ma","Me","Mo","Mi","Mu","My" ,"Pen"]
        self.list2=["lon","ton","son","don","mon", "lan","tan","san","dan","man" ,"lor","tor","sor","dor","mor", "is", "tra", "tri","tru","tro","tre"]
        self.list3=["myr","tyr","syr","dyr","lyr" ,"da","de","do","di","du","dy","ba","be","by","bo","bu" ,"noune"]
        global nomExistant
        
        nombreSyllabe=random.randint(2,3)
        sylla1= self.list1[random.randint(0,self.list1.__len__())-1]
        sylla2= self.list2[random.randint(0,self.list2.__len__())-1]
        
        nom = sylla1+sylla2
        if nombreSyllabe==3:
            sylla3= self.list3[random.randint(0,self.list3.__len__())-1]
            nom = nom+sylla3
            
        for i in range(len(nomExistant)):
            if nom==nomExistant[i]:
                nom=self.genererNom()
        else:  
            nomExistant.append(nom)
        
            return nom        

    
    def genererPlanetes(self): ##### GÉNÉRATION DE 3 A 7 PLANETES
        self.nombrePlanete=random.randint(3, 7)
        IDPlanete=0
        for nb in range(self.nombrePlanete):
            planeteEnPlace = False
    
            while not planeteEnPlace:
                posX=random.randint(50,self.worldSize-50)
                posY=random.randint(50,self.worldSize-50)
                if len(self.listePlanetes) == 0:
                    self.listePlanetes.append((Planete.Planete(self, IDPlanete,posX,posY,"Planete"+str(len(self.listePlanetes)+1), self.seed, self.worldSize)))
                    IDPlanete=IDPlanete+1 
                else:
                    for i in range(len(self.listePlanetes)):
                        if posX > self.listePlanetes[i].posX-self.dimX and posX < self.listePlanetes[i].posX+self.dimX and posY >self.listePlanetes[i].posY-self.dimY and posY <self.listePlanetes[i].posY+self.dimY:
                            planeteEnPlace=False
                            #print("false")
                            break
                        else:
                            planeteEnPlace=True
                            #print("true")
                    if planeteEnPlace==True:
                        self.listePlanetes.append((Planete.Planete(self,IDPlanete,posX,posY,"Planete"+str(len(self.listePlanetes)+1), self.seed, self.worldSize))) 
                        IDPlanete=IDPlanete+1                        
            ##### AFFICHAGE DES INFORMATIONS SUR CHAQUE PLANETES
        #for i in range(len(self.listePlanetes)):
            #print(str(self.listePlanetes[i].posX)  + " " + str(self.listePlanetes[i].posY))
            #print(self.listePlanetes[i].nom)
        
    def trouverPlaneteDepart(self,joueur, n):
        #self.listePlanetes[random.randint(0, self.nombrePlanete)].genererEmplacementDepart(joueur, n)
        planeteDepart = self.listePlanetes[random.randint(0, self.nombrePlanete)]
        self.sysDepart=True
        planeteDepart.genererEmplacementDepart(joueur, n)
        planeteDepart.listeRessources = []
        planeteDepart.listeGisements = []
        planeteDepart.placerGisement()
        planeteDepart.placerRessources()
        
######################################
#######
#######  MÉTHODE D'ACCÈS
#######
######################################


    def constructionPossible(self,joueur):
        for objet in self.listeEntites:
            if objet.nom == "Colonisateur" and objet.joueur == joueur:
                return True
        return False
    
    def placePourConstruire(self,posX,posY,nom,dim):
        # Vérifie s'il n'est pas par dessus un autre bâtiment.
        for objet in self.listeEntites:
            if objet.typeEntite()=="Batiment":
                if posX+dim/2 > objet.posX - objet.dimX/2 and posX -dim/2 < objet.posX + objet.dimX/2 and posY+dim/2 > objet.posY - objet.dimY/2 and posY-dim/2 < objet.posY + objet.dimY/2:
                    return False
        return True
        
    def typeVue(self):
        return "Systeme"
    
    def planeteSelectionnee(self, posX, posY):
        for i in range(len(self.listeSystemes)):
            if self.listeSystemes[i].posX==posX and self.listeSystemes[i].posY==posY:
                return self.listeSystemes[i]

    def infoTerrainSelectionne(self,posX,posY):
        for i in range(len(self.listeRessources)):
            if self.listeRessources[i].posX == posX and self.listeRessources[i].posX == posY:
                return self.listeRessources[i].type

    def selection(self, clicX, clicY): #Regarde si on clic sur l'unite
        if(clicX >= (self.posX - self.dimX / 2) and clicX <= (self.posX + self.dimX / 2) and clicY >= (self.posY - self.dimY / 2) and clicY <= (self.posY + self.dimY / 2)):
            return self.ID
        else:
            return -1

    def trouverEntiteParId(self, id):
        for entite in self.listeEntites:
            if entite.id == id:
                return entite
            
        return None
    
    def getRessourcesJoueur(self):
        return self.ressourcesJoueur
######################################
#######
#######  MÉTHODE DE MODIFICATION
#######
######################################

